--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Remote.h 9b39b6ce5962007fafefc22034082f354eff3374 (9b39b6ce) Text, 7.13 KB
T8b949e// Copyright (C) 2024, Mark Qvist
T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.
T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.
T8b949e// You should have received a copy of the GNU General Public License
T8b949e// along with this program. If not, see <https://www.gnu.org/licenses/>.
Tff7b72#Tff7b72include T8b949e<WiFi.h>
Tff7b72#Tff7b72if CONFIG_IDF_TARGET_ESP32
Tff7b72#Tff7b72include T8b949e"esp32/rom/rtc.h"
Tff7b72#Tff7b72elif CONFIG_IDF_TARGET_ESP32S2
Tff7b72#Tff7b72include T8b949e"esp32s2/rom/rtc.h"
Tff7b72#Tff7b72elif CONFIG_IDF_TARGET_ESP32C3
Tff7b72#Tff7b72include T8b949e"esp32c3/rom/rtc.h"
Tff7b72#Tff7b72elif CONFIG_IDF_TARGET_ESP32S3
Tff7b72#Tff7b72include T8b949e"esp32s3/rom/rtc.h"
Tff7b72#Tff7b72else
Tff7b72#Tff7b72error Target CONFIG_IDF_TARGET is not supported
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72define WIFI_UPDATE_INTERVAL_MS 500
Tff7b72#Tff7b72define WR_SOCKET_TIMEOUT 6
Tff7b72#Tff7b72define WR_READ_TIMEOUT_MS 6500
Tff7b72#Tff7b72define WR_RECONNECT_INTERVAL_MS 10000
Tffa657uint32_t Te6edf3wifi_update_interval_ms Tff7b72= Te6edf3WIFI_UPDATE_INTERVAL_MSTb4b4b4;
Tffa657uint32_t Te6edf3last_wifi_update Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3wr_last_connect_try Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3wr_last_read Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3WiFiClient Te6edf3connectionTb4b4b4;
Te6edf3WiFiServer Td2a8ffremote_listenerTb4b4b4(T79c0ff7633Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3IPAddress Td2a8ffap_ipTb4b4b4(T79c0ff10Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3IPAddress Td2a8ffap_nmTb4b4b4(T79c0ff255Tb4b4b4, T79c0ff255Tb4b4b4, T79c0ff255Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3IPAddress Te6edf3wr_device_ipTb4b4b4;
Tffa657char Te6edf3wr_hostnameTb4b4b4[T79c0ff10Tb4b4b4]Tb4b4b4;
Te6edf3wl_status_t Te6edf3wr_wifi_status Tff7b72= Te6edf3WL_IDLE_STATUSTb4b4b4;
Tffa657uint8_t Te6edf3wifi_mode Tff7b72= Te6edf3WIFI_OFFTb4b4b4;
Tffa657bool Te6edf3wifi_init_ran Tff7b72= Tffa657falseTb4b4b4;
Tffa657bool Te6edf3wifi_initialized Tff7b72= Tffa657falseTb4b4b4;
Tffa657char Te6edf3wr_ssidTb4b4b4[T79c0ff33Tb4b4b4]Tb4b4b4;
Tffa657char Te6edf3wr_pskTb4b4b4[T79c0ff33Tb4b4b4]Tb4b4b4;
Tff7b72extern Tffa657void Td2a8ffhost_disconnectedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwifi_dbgTb4b4b4(Te6edf3String Te6edf3msgTb4b4b4) Tb4b4b4{ Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ff[WiFi] Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3msgTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657uint8_t Td2a8ffwifi_remote_modeTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3wifi_modeTb4b4b4; Tb4b4b4}
Tffa657bool Td2a8ffwifi_is_connectedTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Tb4b4b4(Te6edf3wr_wifi_status Tff7b72=Tff7b72= Te6edf3WL_CONNECTEDTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657bool Td2a8ffwifi_host_is_connectedTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4) Tb4b4b4{ Tff7b72return Tffa657trueTb4b4b4; Tb4b4b4} Tff7b72else Tb4b4b4{ Tff7b72return Tffa657falseTb4b4b4; Tb4b4b4} Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_start_apTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3WiFiTb4b4b4.Te6edf3modeTb4b4b4(Te6edf3WIFI_APTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wr_ssidTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wr_pskTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3softAPTb4b4b4(Te6edf3wr_ssidTb4b4b4, Te6edf3wr_pskTb4b4b4, Te6edf3wr_channelTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3softAPTb4b4b4(Te6edf3wr_ssidTb4b4b4, Tffa657NULLTb4b4b4, Te6edf3wr_channelTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wr_pskTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3softAPTb4b4b4(Te6edf3bt_devnameTb4b4b4, Te6edf3wr_pskTb4b4b4, Te6edf3wr_channelTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3softAPTb4b4b4(Te6edf3bt_devnameTb4b4b4, Tffa657NULLTb4b4b4, Te6edf3wr_channelTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Te6edf3delayTb4b4b4(T79c0ff150Tb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3softAPConfigTb4b4b4(Te6edf3ap_ipTb4b4b4, Te6edf3ap_ipTb4b4b4, Te6edf3ap_nmTb4b4b4)Tb4b4b4;
Te6edf3wifi_initialized Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_start_staTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3WiFiTb4b4b4.Te6edf3modeTb4b4b4(Te6edf3WIFI_STATb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3ipTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4; Tffa657bool Te6edf3ip_ok Tff7b72= Tffa657trueTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff4Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3ipTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3config_addrTb4b4b4(Te6edf3ADDR_CONF_IPTff7b72+Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3ipTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff2Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00Tb4b4b4) Tb4b4b4{ Te6edf3ip_ok Tff7b72= Tffa657falseTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3ipTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff2Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3ipTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFFTb4b4b4) Tb4b4b4{ Te6edf3ip_ok Tff7b72= Tffa657falseTb4b4b4; Tb4b4b4}
Tffa657uint8_t Te6edf3nmTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4; Tffa657bool Te6edf3nm_ok Tff7b72= Tffa657trueTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff4Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3nmTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3config_addrTb4b4b4(Te6edf3ADDR_CONF_NMTff7b72+Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nmTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff2Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0x00Tb4b4b4) Tb4b4b4{ Te6edf3nm_ok Tff7b72= Tffa657falseTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nmTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff2Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFF Tff7b72&Tff7b72& Te6edf3nmTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72=Tff7b72=T79c0ff0xFFTb4b4b4) Tb4b4b4{ Te6edf3nm_ok Tff7b72= Tffa657falseTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3ip_ok Tff7b72&Tff7b72& Te6edf3nm_okTb4b4b4) Tb4b4b4{
Te6edf3IPAddress Te6edf3sta_ipTb4b4b4(Te6edf3ipTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3ipTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3ipTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4, Te6edf3ipTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3IPAddress Te6edf3sta_nmTb4b4b4(Te6edf3nmTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3nmTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3nmTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4, Te6edf3nmTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3configTb4b4b4(Te6edf3sta_ipTb4b4b4, Te6edf3sta_ipTb4b4b4, Te6edf3sta_nmTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wr_ssidTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wr_pskTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3wr_ssidTb4b4b4, Te6edf3wr_pskTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3WiFiTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3wr_ssidTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Te6edf3delayTb4b4b4(T79c0ff500Tb4b4b4)Tb4b4b4;
Te6edf3wr_wifi_status Tff7b72= Te6edf3WiFiTb4b4b4.Te6edf3statusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wifi_initialized Tff7b72= Tffa657trueTb4b4b4;
Te6edf3wr_last_connect_try Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_stopTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3WiFiTb4b4b4.Te6edf3softAPdisconnectTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3disconnectTb4b4b4(Tffa657trueTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3modeTb4b4b4(Te6edf3WIFI_MODE_NULLTb4b4b4)Tb4b4b4;
Te6edf3wifi_initialized Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_startTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_APTb4b4b4) Tb4b4b4{ Te6edf3wifi_remote_start_apTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_STATb4b4b4) Tb4b4b4{ Te6edf3wifi_remote_start_staTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3wifi_remote_stopTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3wifi_initialized Tff7b72=Tff7b72= Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3remote_listenerTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3remote_listenerTb4b4b4.Te6edf3setTimeoutTb4b4b4(Te6edf3WR_SOCKET_TIMEOUTTb4b4b4)Tb4b4b4;
Te6edf3wr_state Tff7b72= Te6edf3WR_STATE_ONTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{ Te6edf3remote_listenerTb4b4b4.Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3wr_state Tff7b72= Te6edf3WR_STATE_OFFTb4b4b4; Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_initTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3memcpyTb4b4b4(Te6edf3wr_hostnameTb4b4b4, Te6edf3bt_devnameTb4b4b4, T79c0ff5Tb4b4b4)Tb4b4b4;
Te6edf3memcpyTb4b4b4(Te6edf3wr_hostnameTff7b72+T79c0ff5Tb4b4b4, Te6edf3bt_devnameTff7b72+T79c0ff6Tb4b4b4, T79c0ff4Tb4b4b4)Tb4b4b4;
Te6edf3wr_hostnameTb4b4b4[T79c0ff9Tb4b4b4] Tff7b72= T79c0ff0x00Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3softAPdisconnectTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3disconnectTb4b4b4(Tffa657trueTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3modeTb4b4b4(Te6edf3WIFI_MODE_NULLTb4b4b4)Tb4b4b4;
Te6edf3WiFiTb4b4b4.Te6edf3setHostnameTb4b4b4(Te6edf3wr_hostnameTb4b4b4)Tb4b4b4;
Te6edf3wr_ssidTb4b4b4[T79c0ff32Tb4b4b4] Tff7b72= T79c0ff0x00Tb4b4b4; Te6edf3wr_pskTb4b4b4[T79c0ff32Tb4b4b4] Tff7b72= T79c0ff0x00Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff32Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3wr_ssidTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3config_addrTb4b4b4(Te6edf3ADDR_CONF_SSIDTff7b72+Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3wr_ssidTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= T79c0ff0xFFTb4b4b4) Tb4b4b4{ Te6edf3wr_ssidTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff0x00Tb4b4b4; Tb4b4b4} Tb4b4b4}
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff32Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3wr_pskTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3config_addrTb4b4b4(Te6edf3ADDR_CONF_PSKTff7b72+Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3wr_pskTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= T79c0ff0xFFTb4b4b4) Tb4b4b4{ Te6edf3wr_pskTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff0x00Tb4b4b4; Tb4b4b4} Tb4b4b4}
Te6edf3wr_channel Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_WCHNTb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3wr_channel Tff7b72< T79c0ff1 Tff7b72|Tff7b72| Te6edf3wr_channel Tff7b72> T79c0ff14Tb4b4b4) Tb4b4b4{ Te6edf3wr_channel Tff7b72= Te6edf3WR_CHANNEL_DEFAULTTb4b4b4; Tb4b4b4}
Te6edf3wifi_remote_startTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wifi_init_ran Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_close_allTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// wifi_dbg("Close all"); // TODO: Remove debug
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4) Tb4b4b4{ Te6edf3connectionTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3WiFiClient Te6edf3client Tff7b72= Te6edf3remote_listenerTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3clientTb4b4b4) Tb4b4b4{ Te6edf3clientTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3client Tff7b72= Te6edf3remote_listenerTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3wr_state Tff7b72= Te6edf3WR_STATE_ONTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_check_activeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3wr_last_read Tff7b72>Tff7b72= Te6edf3WR_READ_TIMEOUT_MSTb4b4b4) Tb4b4b4{
T8b949e// wifi_dbg("Connection activity timed out"); // TODO: Remove debug
Tff7b72if Tb4b4b4(Te6edf3connection Tff7b72&Tff7b72& Te6edf3connectionTb4b4b4.Te6edf3connectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3connectionTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wifi_remote_close_allTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3host_disconnectedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657bool Td2a8ffwifi_remote_availableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4.Te6edf3connectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3wr_last_read Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72return Tffa657trueTb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3wifi_remote_check_activeTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72return Tffa657falseTb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// wifi_dbg("Client disconnected"); // TODO: Remove debug
Te6edf3wifi_remote_close_allTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3WiFiClient Te6edf3client Tff7b72= Te6edf3remote_listenerTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3clientTb4b4b4) Tb4b4b4{ Tff7b72return Tffa657falseTb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e// wifi_dbg("Client connected"); // TODO: Remove debug
Te6edf3connection Tff7b72= Te6edf3clientTb4b4b4;
Te6edf3wr_state Tff7b72= Te6edf3WR_STATE_CONNECTEDTb4b4b4;
Te6edf3wr_last_read Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Tff7b72return Tffa657trueTb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Tff7b72return Tffa657falseTb4b4b4; Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657uint8_t Td2a8ffwifi_remote_readTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3connection Tff7b72&Tff7b72& Te6edf3connectionTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3connectionTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e// wifi_dbg("Error: No data to read from TCP socket"); // TODO: Remove debug
Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4) Tb4b4b4{ Te6edf3wifi_remote_close_allTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72return T79c0ff0xC0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffwifi_remote_writeTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4) Tb4b4b4{ Tff7b72if Tb4b4b4(Te6edf3connectionTb4b4b4) Tb4b4b4{ Te6edf3connectionTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3byteTb4b4b4)Tb4b4b4; Tb4b4b4} Tb4b4b4}
Tffa657void Td2a8ffwifi_update_statusTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3wr_wifi_status Tff7b72= Te6edf3WiFiTb4b4b4.Te6edf3statusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wr_wifi_status Tff7b72=Tff7b72= Te6edf3WL_CONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3wr_device_ip Tff7b72= Te6edf3WiFiTb4b4b4.Te6edf3localIPTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_AP Tff7b72&Tff7b72& Te6edf3wifi_initializedTb4b4b4) Tb4b4b4{ Te6edf3wr_device_ip Tff7b72= Te6edf3WiFiTb4b4b4.Te6edf3softAPIPTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3wr_wifi_status Tff7b72= Te6edf3WL_CONNECTEDTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3wifi_init_ran Tff7b72&Tff7b72& Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_STA Tff7b72&Tff7b72& Te6edf3wr_wifi_status Tff7b72!Tff7b72= Te6edf3WL_CONNECTEDTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3wr_last_connect_try Tff7b72>Tff7b72= Te6edf3WR_RECONNECT_INTERVAL_MSTb4b4b4) Tb4b4b4{ Te6edf3wifi_remote_initTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffupdate_wifiTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3last_wifi_update Tff7b72>Tff7b72= Te6edf3wifi_update_interval_msTb4b4b4) Tb4b4b4{
Te6edf3wifi_update_statusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3last_wifi_update Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────